import os
import re

def rename_files(directory, old_name, new_name):
    # 列出目录中的所有文件
    files = os.listdir(directory)
    
    # 正则表达式匹配日期格式
    date_pattern_with_chinese = re.compile(r'\d{4}年\d{1,2}月\d{1,2}日')  # 例如：2024年09月02日
    date_pattern_without_chinese = re.compile(r'\d{8}')  # 例如：20240902
    date_pattern_iso = re.compile(r'(\d{4})-(\d{1,2})-(\d{1,2})')  # 例如：2024-07-04
    date_pattern_with_dot = re.compile(r'(\d{4})-(\d{1,2})\.(\d{1,2})')  # 例如：2024-07.04
    date_pattern_long = re.compile(r'(\d{8,9})')  # 例如：202407010 或 20240701

    for file in files:
        # 检查文件名是否包含旧的名称部分
        if old_name in file:
            # 尝试提取日期部分
            date_match = (date_pattern_with_chinese.search(file) or 
                          date_pattern_without_chinese.search(file) or 
                          date_pattern_iso.search(file) or 
                          date_pattern_with_dot.search(file) or 
                          date_pattern_long.search(file))
            if date_match:
                # 处理不同格式的日期
                if date_pattern_iso.search(file) or date_pattern_with_dot.search(file):
                    year, month, day = date_match.groups()
                    date_str = f"{year}年{int(month):02d}月{int(day):02d}日"
                elif date_pattern_long.search(file):
                    date_str = date_match.group()
                    if len(date_str) == 8:  # 例如：20240701
                        date_str = f"{date_str[:4]}年{int(date_str[4:6]):02d}月{int(date_str[6:8]):02d}日"
                    elif len(date_str) == 9:  # 例如：202407010
                        date_str = f"{date_str[:4]}年{int(date_str[4:6]):02d}月{int(date_str[6:8]):02d}日"
                        # 处理多余的数字
                        if date_str[6:8] == '10':
                            date_str = f"{date_str[:4]}年{int(date_str[4:6]):d}月{int(date_str[8:9]):d}日"
                        else:
                            date_str = f"{date_str[:4]}年{int(date_str[4:6]):d}月{int(date_str[6:8]):d}日"
                else:
                    date_str = date_match.group()
                    # 如果是没有中文的日期格式，格式化为 "YYYY年MM月DD日"
                    if len(date_str) == 8:  # 例如：20240902
                        date_str = f"{date_str[:4]}年{int(date_str[4:6]):02d}月{int(date_str[6:8]):02d}日"

                # 获取文件的后缀名
                file_extension = os.path.splitext(file)[1]  # 获取文件后缀
                # 只处理后缀为 .xlsx, .docx, .xls, .csv 的文件
                if file_extension in ['.xlsx', '.docx', '.xls', '.csv']:
                    # 构建新的文件名
                    new_file_name = f"{new_name}-{date_str}{file_extension}"
                    # 构建完整的文件路径
                    old_file_path = os.path.join(directory, file)
                    new_file_path = os.path.join(directory, new_file_name)
                    
                    # 检查新文件是否已存在
                    if not os.path.exists(new_file_path):
                        # 重命名文件
                        os.rename(old_file_path, new_file_path)
                        print(f"Renamed: {file} -> {new_file_name}")
                    else:
                        print(f"文件已存在，跳过: {new_file_name}")

if __name__ == "__main__":
    # 获取用户输入
    directory = r"E:\4.运维项目\7.系统监测巡检记录\容器云日常巡检"
    old_name = input("请输入要替换的文件名（不包含日期部分）: ")
    new_name = input("请输入替换成的文件名（不包含日期部分）: ")
    
    # 执行重命名
    rename_files(directory, old_name, new_name)